package com.hy.Three394;

/**
 * Created With IntelliJ IDEA.
 * Descriptions:100291. 统计特殊字母的数量 II
 *
 * 给你一个字符串 word。如果 word 中同时出现某个字母 c 的小写形式和大写形式，并且 每个 小写形式的 c 都出现在第一个大写形式的 c 之前，则称字母 c 是一个 特殊字母 。
 * 返回 word 中 特殊字母 的数量。
 *
 * 示例 1:
 * 输入：word = "aaAbcBC"
 * 输出：3
 * 解释：特殊字母是 'a'、'b' 和 'c'。
 *
 * 示例 2
 * 输入：word = "abc"
 * 输出：0
 * 解释： word 中不存在特殊字母。
 *
 * 示例 3:
 * 输入：word = "AbBCab"
 * 输出：0
 * 解释：word 中不存在特殊字母。
 *
 * User:Mr.Du
 * Date:2024/4/21
 * Time:13:04
 */
public class NumberOfSpecialCharsI {
    /**
     * 计算字符串中特殊字符的个数。
     * 特殊字符定义为：小写字母出现在对应大写字母之前。
     *
     * @param word 待检查的字符串
     * @return 字符串中特殊字符的个数
     */
    public int numberOfSpecialChars(String word) {
        // 初始化两个数组，分别用于统计大写和小写字母的出现次数
        int[] nums1 = new int[26];
        int[] nums2 = new int[26];
        int n = word.length(), cnt = 0; // n为字符串长度，cnt为特殊字符计数器

        // 遍历字符串，统计大写和小写字母出现次数
        for(int i = 0; i < n; i++){
            char c = word.charAt(i);
            if(Character.isUpperCase(c)){
                nums1[c - 'A']++;
            }else{
                nums2[c - 'a']++;
            }
        }

        // 检查每个字母，如果大写和小写形式都出现过，且小写在前大写在后，则计数器加一
        for(int i = 0; i < 26; i++){
            if(nums1[i] > 0 && nums2[i] > 0){
                char c1 = (char)(i + 'A');
                char c2 = (char)(i + 'a');
                if(word.lastIndexOf(c2) < word.indexOf(c1)){
                    cnt++;
                }
            }
        }
        return cnt;
    }
}
